#include "enemy_1.h"

extern int G_W, G_H;
extern QPoint shuttle_pos;

ENEMY_1::ENEMY_1(SCENE *scene, QTimeLine *global_tl, CASH *cash):QGraphicsObject()
{

    go = new SOUND_POWER(cash,"Res/Sound/Enemy/Enemy_1/go.ogg",this);
    go->Play_Now();

    qsrand(QTime::currentTime().second());

    point=20;

    border = cash->cash_poly->value("Res/Ships/Enemy/Enemy_1/enemy_1.poly");
    im = cash->cash_pixmap->value("Res/Ships/Enemy/Enemy_1/Enemy_1.png");

    this->setZValue(0.5);

    int step_1= 0+qrand()%(G_W-0+1);                                                    // Начальная позиция корабля по X
    this->setPos(step_1,-100);                                                          // -300 респаун за экраном

    anim_enemy = new QGraphicsItemAnimation();

    enemy_time_line = new QTimeLine(5000);                                             // Скорость перемещения обьекта по траектории
    enemy_time_line->setEasingCurve( QEasingCurve::Type(1));

    enemy_time_line->setFrameRange(0, 1);

    anim_enemy->setTimeLine(enemy_time_line);
    anim_enemy->setItem(this);

    anim_enemy->setPosAt(0,QPointF(step_1,-100) );                                      //-300 респаун за экраном
    anim_enemy->setPosAt(0.5,QPointF(0+qrand()%(G_W-0+1),300+qrand()%(300-100+1)));
    anim_enemy->setPosAt(1,QPointF(0+qrand()%(G_W-0+1),1068));                          // 1068 dead line

    enemy_time_line->start();

    fp_left = QPoint(30,110);                                                           // Точка вылета левой ракеты
    fp_right = QPoint(76,110);                                                         // Точка вылета правой ракеты

    timer_id=startTimer(300);

    ammunition=3;                                                                       // Запас рокет у коробля

    collisia_control = new COLLISIA_CONTROL(scene,((QGraphicsObject*)this),this,global_tl,cash,10);

    connect(collisia_control,SIGNAL(Collisia(QPointF,int)),this,SLOT(Damage_Detected(QPointF,int)));
    connect(enemy_time_line,SIGNAL(finished()),SLOT(deleteLater()));

}

void ENEMY_1::timerEvent(QTimerEvent *)
{

    if(ammunition)
        if( this->pos().x()<shuttle_pos.x()+30 && this->pos().x()>shuttle_pos.x()-30 ){         // 30 радиус обстрела шатла
            emit Fire( QPoint( this->pos().x()+fp_left.x(),this->pos().y()+fp_left.y() )   );   // Эффект стрельбы наперёд
            emit Fire( QPoint( this->pos().x()+fp_right.x(),this->pos().y()+fp_right.y() )  );
            --ammunition;
        }

}

QPainterPath ENEMY_1::shape() const
{

    return *border;

}

QRectF ENEMY_1::boundingRect() const
{

    return QRectF( QPointF(0,0), im->size() );

}

void ENEMY_1::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{

   painter->save();
   painter->drawPixmap( 0,0,*im);
   painter->restore();

}

ENEMY_1::~ENEMY_1()
{
}

int ENEMY_1::type() const
{

    return point;

}

void ENEMY_1::Damage_Detected(QPointF a, int d)
{

    a = QPointF();
    point-=d;

    if(point<=0)
        if(this->scene()){
            disconnect(enemy_time_line,SIGNAL(finished()),this,SLOT(deleteLater()));
            killTimer(timer_id);
            emit Kill_Me_Please((QGraphicsObject*)this);
        }

}
